package com.geek.gkpush.util.str;

import com.geek.gkpush.util.excp.GkPushCodeEnum;
import com.geek.gkpush.util.excp.GkPushException;
import redis.clients.jedis.Protocol;

import java.io.UnsupportedEncodingException;

/**
 * <h1>字符串截取工具类。</h1><br/>
 *
 * <h1><br/><a href="https://u.geekbang.org/subject/arch3/100614201">Java 业务架构实战营：https://u.geekbang.org/subject/arch3/100614201</a></h1><br/><h1><a href="https://gitee.com/ylimhhmily/BizArchPracticeCamp">Java 业务架构实战营代码地址：https://gitee.com/ylimhhmily/BizArchPracticeCamp</a></h1><br/><h1><a href="https://u.geekbang.org/subject/java4th/1001148?source=app_share">高级 Java 工程体系课 2023 版：https://u.geekbang.org/subject/java4th/1001148?source=app_share</a></h1><br/><h1><a href="https://time.geekbang.org/column/intro/100312101?tab=catalog">Dubbo 源码剖析与实战：https://time.geekbang.org/column/intro/100312101?tab=catalog</a></h1>
 *
 * @author hmilyylimh
 * ^_^
 * @version 0.0.1
 * ^_^
 * @date 2023/10/2 19:57
 */
public class StringCutUtils {

    /**
     * <h2>截取字符串长度。</h2>
     *
     * @param: src
     * @param: maxLen
     * @return: java.lang.String
     */
    public static String cut(String src, int maxLen) {
        if (src == null) {
            return null;
        }

        try {
            StringBuilder sb = new StringBuilder();
            int currentLength = 0;
            for (char c : src.toCharArray()) {
                currentLength += String.valueOf(c).getBytes(Protocol.CHARSET).length;
                if (currentLength <= maxLen) {
                    sb.append(c);
                } else {
                    break;
                }
            }
            return sb.toString();
        } catch (UnsupportedEncodingException e) {
            throw new GkPushException(GkPushCodeEnum.UN_SUPPORT_EXCEPTION, "编码不支持", e);
        }
    }
}